package com.shangke.corejava.ch14;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class ChatServer {

	public static void main(String[] args) {

		int port = 8888;
		ServerSocket serverSocket = null;   //服务器
		Socket socket = null;     //客户端
		InputStream inputStream = null;
		OutputStream outputStream = null;
		try {
			// 1.启动服务器监听
			serverSocket = new ServerSocket(port);  //构造函数
			System.out.println("服务器启动成功，请使用客户端进行连接");
			
			// 2.等待客户端进行连接
			socket = serverSocket.accept();
			System.out.println("客户端连接成功");
			
			// 3.客户端连接后，打开输出法（准备从客户端读取数据输入）
			inputStream = socket.getInputStream();
			outputStream = socket.getOutputStream();
			
			// 发送数据到客户端
			//outputStream.write(("reply from server ！").getBytes());
			
			// 4.读取客户端发生过的数据
			
			boolean chatting = true;
			while(chatting){   //chatting  一直为真，程序一直在运行
				byte[] buffer = new byte[512];
				
				// 等待客户端发生连接，并接受 ---有阻塞作用
				int len = inputStream.read(buffer);
				
				// 对数据进行处理
				String string = new String(buffer, 0, len);
				
				//网络通信需要有一方发起结束通信请求，另一方需要接受退出请求，并正常运行
				//当输入 quit 时，就退出连接协议
				if ("quit".equalsIgnoreCase(string.trim())) {  //trim() 客户端发生的内容可能包含有回车键或其它特殊符号
					chatting = false;
				}
				System.out.println(string);
				outputStream.write(("parrot:"+string).getBytes("UTF-8"));
			}
			

		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (inputStream != null) {
				try {
					inputStream.close();
				} catch (IOException e) {
				}
			}
			if (outputStream != null) {
				try {
					outputStream.close();
				} catch (IOException e) {
				}
			}
			if (socket != null) {
				try {
					socket.close();
				} catch (IOException e) {
				}
			}
			if (serverSocket != null) {
				try {
					serverSocket.close();
				} catch (IOException e) {
				}
			}
		}
	}
}
